package com.kk.algorithm.kmp;
/*
 * @Description:
 * @Author:         阿K
 * @CreateDate:     2021/2/6 12:05
 * @Param:
 * @Return:
**/
public class ViolenceMatch {

    public static void main(String[] args) {
        // 测试暴力匹配算法
        String s1 = "阿KK啊，是啊帅了个阿K 是个大，阿K是个大帅比！";
        String s2 = "阿K是个大帅比~";

        int index = violenceMatch (s1, s2);
        System.out.println (index);
    }


    /**
     * 暴力匹配算法实现
     *
     * @param s1 原始词典
     * @param s1 匹配词典
     * @return 成功返回 位置索引，失败返回 -1
     */
    public static int violenceMatch(String s1, String s2) {
        char[] chars1 = s1.toCharArray ( );
        char[] chars2 = s2.toCharArray ( );

        int s1Len = chars1.length;
        int s2Len = chars2.length;

        int i = 0;// i 索引指向 s1 ,逐次递增
        int j = 0;// j 索引指向 s2 ,逐次递增

        while (i < s1Len && j < s2Len) {// 确保匹配时，不越界
            if (chars1[i] == chars2[j]) {// 匹配成功
                i++;
                j++;
            } else {// 若失配 （未匹配成功）
                i = i - (j - 1);//个人觉得： 括号内的 j - 1 和括号 外的 -1 , 负负得正，其实是 i+1-j,更容易理解
                j = 0;
            }
        }

        // 校验是否匹配成功
        // 说明：j 是不断变动的，跟随匹配成功次数，逐次递增到原有匹配子串长度一致后，既成功
        if (j == s2Len) {
            return i - j;
        } else {
            return -1;
        }
    }
}
